#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    pid_t subprocess;

    subprocess = fork();

    if (subprocess < 0)
    {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    else if (subprocess == 0)
    {
        // 这个分支只有子进程会执行
        printf("我是子进程\n");
        // 希望子进程启动另外一个程序
        char *argv[] = {
            "ping",
            "-c",
            "10",
            "www.baidu.com",
            NULL};
        int result = execve("/usr/bin/ping", argv, __environ);
        if (result < 0)
        {
            perror("result");
        }
    }
    else
    {
        // pid >0的情况，这个分支由父进程执行
        printf("我是父进程, 子进程pid为: %d\n", subprocess);

        int child_result;
        // 父进程可以等待子进程结束，并获取子进程的返回值
        pid_t child_pid = wait(&child_result);
        // pid_t child_pid = waitpid(-1, &child_result, 0);
        printf("子进程%d完成, 返回值为: %d\n", child_pid, child_result);
        // sleep(10000);
    }

    return 0;
}
